#ifndef KEY_H_
#define KEY_H_

#include "../Objeto.h"
#include "DatoClave.h"
#include <string>

class Key : public Objeto {

private:
	DatoClave* dato;

public:
	/*
	 * Pre: -
	 * Pos: Crea una nueva instancia.
	 */
	Key(DatoClave* clave);

	/*
	 * Pre: -
	 * Pos Constructor copia.
	 */
	Key(const Key &);

	/*
	 * Pre: -
	 * Pos: Crea una nueva instacia con un dato nulo.
	 */
	Key();

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~Key();

	/*
	 * Pre: -
	 * Pos: sobrecarga de operadores.
	 * Aqui utilizamos el Patron Delegador, todos los operadores son delegados al dato clave.
	 */
	Key& operator=(const Key& otro);
	bool operator==(const Key& otro)const;
	bool operator<(const Key& otro)const ;
	bool operator>(const Key& otro)const ;
	bool operator<=(const Key& otro)const ;

	Bytes serializarse();
	bool hidratarse(const Bytes&);
	std::string toString()const;
	 cantBytes getTamanio();

};

#endif /* KEY_H_ */
